package com.blog.service.Impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.blog.dao.BlogMapper;
import com.blog.pojo.Blog;
import com.blog.service.BlogService;
import com.blog.service.RedisService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Lang;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * Copyright (C), 2022
 * Author: 苏大大
 * Date: 2022-04-21 16:47
 * FileName: BlogServiceImpl
 * Description: 博客业务层
 */
@Service
public class BlogServiceImpl  implements BlogService {

    @Resource
    private BlogMapper mapper;

    @Resource
    private RedisTemplate redisTemplate;


    @Override   //数据缓存化
    public List<Blog> queryByTypeAll(Integer type_id, String title) {
        List<Blog> Cachelist=mapper.queryByTypeAll(type_id, title);
        if(redisTemplate.opsForValue().get("blogTypeList")!=null&&Cachelist==redisTemplate.opsForValue().get("blogTypeList")){
            String a=redisTemplate.opsForValue().get("blogTypeList").toString();
            List<Blog> list=(List<Blog>) JSON.parseArray(a,Blog.class);
            return list;
        }
        if(Cachelist!=null){
            //异常设备的json数组,把list转换为json形式数组
            JSONArray jsonArray= JSONObject.parseArray(JSONObject.toJSONString(Cachelist));
            //将json形式数组装换为string类型
            String json= jsonArray.toJSONString();
            //将需要缓存的数据缓存入redis
            redisTemplate.opsForValue().set("blogTypeList",json);
        }
        String a=redisTemplate.opsForValue().get("blogTypeList").toString();
        List<Blog> List=(List<Blog>) JSON.parseArray(a,Blog.class);

        return List;
    }

    public PageInfo<Blog> queryByTypePageAll(int pageNumber, int pageSize,Integer type_id, String title){
        PageHelper.startPage(pageNumber,pageSize);
        List<Blog>list= mapper.queryByTypeAll(type_id,title);
        PageInfo<Blog> pageInfo=new PageInfo<>(list);
        return pageInfo;
    }

    @Override   //数据缓存化
    public List<Blog> queryByTagAll(Integer tag_id) {
        List<Blog> CacheList=mapper.queryByTagAll(tag_id);
        if(redisTemplate.opsForValue().get("blogTagList")!=null&&CacheList==redisTemplate.opsForValue().get("blogTagList")){
            String a=redisTemplate.opsForValue().get("blogTagList").toString();
            List<Blog> list=(List<Blog>) JSON.parseArray(a,Blog.class);
            return list;
        }
        if(CacheList!=null){
            //异常设备的json数组,把list转换为json形式数组
            JSONArray jsonArray= JSONObject.parseArray(JSONObject.toJSONString(CacheList));
            //将json形式数组装换为string类型
            String json= jsonArray.toJSONString();
            //将需要缓存的数据缓存入redis
            redisTemplate.opsForValue().set("blogTagList",json);
        }
        String a=redisTemplate.opsForValue().get("blogTagList").toString();
        List<Blog> List=(List<Blog>) JSON.parseArray(a,Blog.class);

        return List;
    }

    @Override
    public PageInfo<Blog> queryByTagPageAll(int pageNumber, int pageSize, int tag_id) {
        PageHelper.startPage(pageNumber,pageSize);
        List<Blog>list= mapper.queryByTagAll(tag_id);
        PageInfo<Blog> pageInfo=new PageInfo<>(list);
        return pageInfo;
    }

    @Override
    public List<Blog> queryRecommendBlog() {
        List<Blog> CacheList=mapper.queryRecommendBlog();
        if(redisTemplate.opsForValue().get("RecommendBlogList")!=null&&CacheList==redisTemplate.opsForValue().get("blogTagList")){
            String a=redisTemplate.opsForValue().get("RecommendBlogList").toString();
            List<Blog> list=(List<Blog>) JSON.parseArray(a,Blog.class);
            return list;
        }
        if(CacheList!=null){
            //异常设备的json数组,把list转换为json形式数组
            JSONArray jsonArray= JSONObject.parseArray(JSONObject.toJSONString(CacheList));
            //将json形式数组装换为string类型
            String json= jsonArray.toJSONString();
            //将需要缓存的数据缓存入redis
            redisTemplate.opsForValue().set("RecommendBlogList",json);
        }
        String a=redisTemplate.opsForValue().get("RecommendBlogList").toString();
        List<Blog> List=(List<Blog>) JSON.parseArray(a,Blog.class);

        return List;
    }

    @Override //根据博客id查询博客信息
    @Transactional
    public Blog queryByIdBlog(Long blogId) {
        return mapper.queryByIdBlog(blogId);
    }

    @Override
    public List<Blog> queryByuIdBlog(Long uid) {
        return mapper.queryByuIdBlog(uid);
    }

    @Override
    @Transactional
    public int UpdateBlog(Blog blog) {
        return mapper.UpdateBlog(blog);
    }

    @Override
    @Transactional
    public int thumb_up(Integer thumbs, Long blogId) {
        return mapper.thumb_up(thumbs, blogId);
    }
}
